package br.kanban.view.mb;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.enterprise.context.ConversationScoped;
import javax.faces.application.FacesMessage;
import javax.inject.Inject;
import javax.inject.Named;

import org.primefaces.context.RequestContext;

import br.kanban.core.busines.ClienteBO;
import br.kanban.core.busines.ProjetoBO;
import br.kanban.core.persistence.Cliente;
import br.kanban.core.persistence.Projeto;
import br.kanban.core.persistence.Projeto.StatusProjeto;

@ConversationScoped
@Named
public class ProjetoMB extends GenericMB<Projeto> implements Serializable{

	private static final long serialVersionUID = 1L;
	
	@Inject
	private ProjetoBO projetoBO;
	
	@Inject
	private ClienteBO clienteBO;
	
	private List<Cliente> clientes;

	@Override
	public void pesquisar() {
		lista = projetoBO.pesquisar(filtro);
	}
	
	@PostConstruct
	public void init(){
		if (conversation.isTransient()) {  
            conversation.begin();  
        }  
		filtro = new Projeto();
		objeto = new Projeto();
		lista = new ArrayList<Projeto>();
		clientes = clienteBO.pesquisar(new Cliente());
	}

	@Override
	public void novo() {
		objeto = new Projeto();
		objeto.setStatus(StatusProjeto.ABERTO);
	}

	@Override
	public void editar(Projeto Projeto) {
		objeto = Projeto;
	}

	public void excluir() {
		projetoBO.delete(objeto);
		lista.remove(objeto);
		addMessage(FacesMessage.SEVERITY_INFO, "Projeto Excluido com Sucesso", " "); 
	}

	@Override
	public void salvar() {
		context = RequestContext.getCurrentInstance();
		
		if(validateForm()){
			if(objeto.getCodigo() == null){
				lista.add(projetoBO.insert(objeto));
				addMessage(FacesMessage.SEVERITY_INFO, "Projeto Cadastrado com Sucesso", " "); 
			}else{
				projetoBO.update(objeto);			
				addMessage(FacesMessage.SEVERITY_INFO, "Projeto Alterado com Sucesso", " "); 
			}
			context.addCallbackParam("sucesso", true);  
		}else{
			context.addCallbackParam("sucesso", false);  			
		}
		
	}
	
	@Override
	public boolean validateForm() {
		StringBuilder sb = new StringBuilder(100);
 
		if(isEmpty(objeto.getTitulo())) sb.append("Campo Título vazio <br />");
		if(objeto.getCliente() == null ) sb.append("Campo Cliente vazio <br />");
		if(isEmpty(objeto.getDescricao())) sb.append("Campo Descrição vazio <br />");
		if(isEmpty(objeto.getDatainicio())) sb.append("Campo Data Início vazio <br />");
		if(isEmpty(objeto.getDatafim())) sb.append("Campo Data Fim vazio <br />");
		
		
		if(!sb.toString().isEmpty()){
			addMessage(FacesMessage.SEVERITY_ERROR, "Campos Inválidos", sb.toString());
			return false;
		}else{
			return true;
		}
	}

	public List<StatusProjeto> getStatusProjetos(){
		return Arrays.asList(StatusProjeto.values());
	}
	
	public List<Cliente> getClientes(){
		return clientes;
	}
}
